Une table dynamique

Cet exemple générera une table dynamique, avec une ligne ajoutée pour chaque enregistrement joint (voir ci-dessous pour une illustration).

Dans cet exemple nous avons un tableau avec une ligne et trois colonnes :

Tableau

Le code pour cet exemple est :

Private Sub Document_Open()
	' 
	' Installer la source de données et lancer la fusion
	Set MainDocument = ActiveDocument
	With ActiveDocument.MailMerge
		.MainDocumentType = wdFormLetters
		.OpenDataSource _
			Name:="", _
			connection:="DSN=EMu Loans;", _
			SQLStatement:="SELECT * FROM eloans.csv", _
			Subtype:=wdMergeSubTypeWord2000
		.Destination = wdSendToNewDocument
		.Execute Pause:=False
	End With

 

Dim key As String
Dim row As Integer
Dim table As Word.table
Dim connection As New ADODB.connection
Dim recordset As New ADODB.recordset
' 
' Connecter au DSN que nous allons utiliser
connection.Open "DSN=EMu Loans;"
' 
' Ce code vérifie chaque tableau que nous avons ajouté au document Word pour le peupler avec les données.
' avec les données. Dans cet exemple nous avons un seul tableau.
For i = 1 To ActiveDocument.Tables.Count
	With ActiveDocument.Tables(i)
	' 
	' Copier et modifier la section "If" suivante du code (entre les déclarations If et
	' End If) pour chaque fichier .csv généré.
	If InStr(.Cell(1, 1).Range.Text, "IRN") = 1 Then
       	' 
	' Identifier la clé – dans ce cas localiser dans ligne 1, colonne 2
	key = .Cell(1, 2).Range.Text
	key = Trim(Left(key, Len(key) - 2))
	' 
	' Nous voulons afficher les NEI et Données sommaires.
	' Puisque le nombre d’enregistrements Catalogue joint est inconnu, nous utilisons le
	' code suivant pour ajouter dynamiquement une ligne pour chaque enregistrement.
	row = 1
      	' 
	' Vous remplacerez le nom du fichier .csv et la clé comme nécessaire
	' pour votre rapport.
	' Dans cet exemple le fichier .csv est appelé ObjObjec.csv
	' et la clé est eloans_key
	recordset.Open "select * from ObjObjec.csv where eloans_key = " & key, connection
	While Not recordset.EOF
		row = row + 1
		.Rows.Add
		.Cell(row, 1).Range.Text = recordset("irn")
		.Cell(row, 3).Range.Text = recordset("SummaryData")
		recordset.MoveNext
	Wend
	recordset.Close
      	' 
	' Enlever la colonne contenant la clé pour qu’elle ne s’affiche
	' dans le rapport de publipostage
	.Columns(2).Select
	Selection.Columns.Delete	
   
	' Enlever les bordures du tableau
	.Borders.Enable = False
   
	End If
End With
Next i
' 
' Fermer les connections
connection.Close
' 
' Forcer tous les champs à être mis à jour dans le cas où nous avons des images
ActiveDocument.Fields.Update
' MainDocument.Close SaveChanges:=False
End Sub
Private Sub Document_Close()
'  Lorsque le document est fermé, nous devons déconnecter la
'  source de données, sinon Word tentera de l’utiliser
'  à l’ouverture du document
ActiveDocument.MailMerge.MainDocumentType = wdNotAMergeDocument
ActiveDocument.Save
End Sub

L'éditeur Microsoft Visual Basic apparaît semblable à :

Code pour tableau dynamique

  1. Sauvegarder et fermer le document de rapport principal.
  2. À l’étape 1. Saisir le code VB. Nous avions modifié le code VB à des fins de test en le commentant MainDocument.Close SaveChanges:=False. Avant de pouvoir finaliser le rapport, nous devons éditer le code VB pour supprimer l'apostrophe.

    Lorsque le rapport est exécuté, le rapport de publipostage suivant sera généré avec une ligne ajoutée au tableau Objets pour chaque objet associé :

    Rapport de publipostage